package com.efuture.chaptersix

/* @Description:Kotlin语言的vararg参数(动态参数)
 * @Auther: zhaoshanshan
 * @Date: 2022/03/08/1:49 下午
 */

class Demo100<T>(vararg  objects:T,var isMap:Boolean){
    // out 我们的T只能被 读取，不能修改   T只能读取
   private val objectArray:Array<out T> = objects
    //万能对象返回
   fun showObj(index:Int):T? = objectArray[index].takeIf { isMap }?:null

    //类型转换
    fun <O> mapObj(index:Int,mapAction:(T?)->O?)=mapAction(objectArray[index].takeIf { isMap })
}
fun main() {

    val d1 = Demo100(123,"123",true,'男',null,isMap = true)
    println(d1.showObj(0))
    println(d1.showObj(1))
    println(d1.showObj(2))
    println(d1.showObj(3))
    println(d1.showObj(4))

    val r1 = d1.mapObj(2){//it的类型  实际上 真正的类型 {Comparable<*> & java.io.Serializable}  需要转换一下才行 例如：it.toString
        it.toString()
    }
    println(r1)

}
    